"""
author：fc
date：  2021/10/4
"""
#
# 数据规范化分为：离散标准化、标准差标准化、小数定标标准化，主要为了消除量纲（即单位）和变异数据的影响
# 下面分别实现
import numpy as np
import pandas as pd
import data_deal_util


# ============
# 1 离散标准化
# 公式：x_new=(x-min)/(max-min)
# ============
def data_discret_normal(old_data):
    return (old_data - np.min(old_data)) / (np.max(old_data) - np.min(old_data))


# ============
# 2 标准差标准化
# 公式：x_new=(x-平均数）/标准差
# ==============
def data_std_normal(old_data):
    return (old_data - np.mean(old_data)) / (np.std(old_data))


# ============
# 小数定标标准化
# 公式 x_new=x/(10**(log_10(max(abs(x))))
# =============
def data_mini_normal(old_data):
    return old_data / (10 ** np.log10(np.max(np.abs(old_data))))


if __name__ == '__main__':
    data = data_deal_util.data_deal()

    # 数据离散规范化
    data_discret=data.copy()
    data_discret['comment']=data_discret_normal(data_discret['comment'])
    data_discret['price']=data_discret_normal(data_discret['price'])
    print(f"离散标准化：\n{data_discret.describe()}")

    # 数据标准差规范化
    data_std=data.copy()
    data_std['price']=data_std_normal(data_std['price'])
    data_std['comment']=data_std_normal(data_std['comment'])
    print(f"标准差标准化：\n{data_std.describe()}")

    # 数据小数定标规范化
    data_mini=data.copy()
    data_mini['price']=data_mini_normal(data_mini['price'])
    data_mini['comment']=data_mini_normal(data_mini['comment'])
    print(f"小数定标标准化\n:{data_mini.describe()}")